// ts的类
// ts新增的 属性方法修饰符
// public  （公共的）    我们可以自由的访问程序里定义的成员
// private  (私有的)  当成员被标记成 private 时，它就不能在声明它的类的外部访问。
// protected (受保护的)   不能外部访问 只能在内部和子类内部访问
class Person{
  // ts的类 提前声明类的属性
  public name:string
  private age:number
  constructor(name:string,age:number){
    this.name=name;
    this.age=age;
  }
  say(str:string):string{
      console.log(str)
      return str
  } 
  protected playgame(){
    console.log("打游戏")
  }
  private sleep(){ //私有方法
    console.log("睡觉")
  }
  public run(){ //公共的方法
     this.sleep();
     this.playgame();//受保护的方法和属性 只能在 类的内部和子类内部访问
    console.log("跑起来");
  }
}

let wangyimin=new Person("益民大酒店",18);
console.log(wangyimin)
wangyimin.say("做大做强，再创辉煌")
console.log(wangyimin.name) //益民大酒店
// wangyimin.playgame(); //受保护的方法和属性 不能外部调用
// wangyimin.sleep();//私有方法 只能在类的内部访问
// 类的继承
// 1)class  子类 extends 父类名称
// 2) 在constructor 调用super 可以父类传参

class Student extends Person{
  // 学生类的属性 提前声明
    stuid:string 
    sex:string
    constructor(stuid:string,sex:string){
       super("王德发",18) ; //给父类传参
        this.stuid=stuid;
        this.sex=sex;
    }
    eat(food:string):void{
        this.playgame();//受保护的方法 可以在子类中调用
      console.log("吃了"+food)
    }

}
var defa=new Student("1231","男")
defa.say("今天星期二,马上放假");
defa.run();
defa.eat("苹果");
